Communications between electrical circuits generally require that the circuit receiving the data must be able to receive the data at the same rate and time that the sending circuit transmits it. Discrepancies in the data rate or time of communication between the two circuits can lead to errors or loss of data.
Clocking circuits have traditionally operated at one of two classes of data rates: a single data rate, clocking on one edge of a primary clock, or a double data rate, clocking on both edges of the primary clock. This results in three types of circuits: a circuit that clocks on the rising edge of the primary clock, a circuit that clocks on the falling edge, or a circuit that clocks on both rising and falling edges.
Problems can arise when a circuit of one type tries to communicate with a circuit of another type. In one situation, the transmitting circuit attempts to transfer data at a different rate than the receiving circuit can handle, such as a double data rate processor circuit transmitting to a single data rate SDRAM. When the transmitting circuit transfers data at a faster rate than the receiving circuit can handle, the receiving circuit can miss portions of the data. For example, if a transmitting circuit transmits data at a rate of 66 MHz, while the receiving circuit receives data at 33 MHz, the receiving circuit will at best receive half of the data transmitted (rate of data received/rate of data sent=33 MHz/66 MHz=1/2).
In another situation, the receiving circuit may only "read" the data at a given point in time, and for a given duration. If the data is not present during that time, it may not be received. Here, the transmitting circuit may transmit data on one edge of the primary clock, such as the rising edge, while the receiving circuit "reads" the data on the other edge of the clock, such as the falling edge.
One solution to this problem is the addition of a latch circuit between the transmitting circuit and the receiving circuit. A latch maintains a data signal until it is overwritten by a new data signal. Thus, data can be held until the receiving circuit is ready to "read" it. The problem with this solution is that this requires additional circuitry; circuitry that takes up space and requires additional power. This is the antithesis of the goals of modern circuit design, which is to minimize the amount of circuitry and power usage.
These problems are particularly prevalent for communications in a synchronous dynamic random access memory (SDRAM). A SDRAM can use all or some of the three clocking protocols discussed above: clocking on the rising edge of a clock signal, the falling edge, or both edges. Similarly, a processor, or more specifically, a memory controller, that communicates with and controls the SDRAM can use all or some of the same three clocking protocols. In order for a given SDRAM to efficiently communicate with a given memory controller, the two circuits must use the same clocking protocol, sending and receiving data at the same rate and time, i.e., both clocking on the same edge or edges of the same clock signal. Thus, the need to match clocking protocols limits the memory controllers that can be used with a given SDRAM.
In the past, proper communication between a given memory controller and the SDRAM has been ensured by producing several types of SDRAMs, each of which uses a single clocking protocol. This solution, however, requires that several different types of SDRAMs and compatible memory controllers be available, and results in an unnecessarily expanded product line by manufacturers and sellers of SDRAMs and memory controllers.
Therefore, there is a need for a single SDRAM or clocking circuit that is capable of operating on either or both edges of a clock signal, for communications with memory controllers having varying data rates and times of communication.